﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

namespace Model
{
    [Serializable()]
    public class AbstracteLaag : ISerializable
    {
        //private List<string> uitgeslotenCategorieën;
        private List<POI> puntenVanInteresse;
        private int aantalMeter;
        private double doelbedrag;
        private double factor;
        private List<string> categoriën;
        private double snelheid;
        private static AbstracteLaag singleton;

        private AbstracteLaag()
        {
            PuntenVanInteresse = new List<POI>();
        }

        private AbstracteLaag(SerializationInfo info, StreamingContext ctxt)
        {
            //uitgeslotenCategorieën = (List<string>)info.GetValue("UitgeslotenCategorien", typeof(List<string>));
            puntenVanInteresse = (List<POI>)info.GetValue("PuntenVanInteresse", typeof(List<POI>));
            aantalMeter = (int)info.GetValue("AantalMeter", typeof(int));
        }

        public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
        {
            info.AddValue("PuntenVanInteresse", this.puntenVanInteresse);
            info.AddValue("AantalMeter", this.aantalMeter);
        }


        public static AbstracteLaag GetInstance()
        {
            if (singleton == null)
            {
                singleton = new AbstracteLaag();
            }
            return singleton;
        }

        ///// <summary>
        ///// De uitgesloten categorieën
        ///// </summary>
        //public List<string> UitgeslotenCategorieën
        //{
        //    get { return uitgeslotenCategorieën; }
        //    set { uitgeslotenCategorieën = value; }
        //}

        public List<POI> PuntenVanInteresse
        {
            get { return puntenVanInteresse; }
            set { puntenVanInteresse = value; }
        }

        /// <summary>
        /// Het aantal te lopen meters
        /// </summary>
        public int AantalMeter
        {
            get { return aantalMeter; }
            set { aantalMeter = value; }
        }

        /// <summary>
        /// Het doelbedrag
        /// </summary>
        public double Doelbedrag
        {
            get { return doelbedrag; }
            set { doelbedrag = value; }
        }

        /// <summary>
        /// Het aantal eurocent/sec wat aan straftijd erbij moet worden gezet
        /// </summary>
        public double Factor
        {
            get { return factor; }
            set { factor = value; }
        }

        public List<string> Categoriën
        {
            get { return categoriën; }
            set { categoriën = value; }
        }

        public double Snelheid
        {
            get { return snelheid; }
            set { snelheid = value; }
        }

        public static AbstracteLaag Instance
        {
            set { singleton = value; }
            get { return singleton; }
        }
    }
}
